Выделяем обучающую и тестовую выборки. Проверку качества модели в процессе подбора её параметров будем делать с использованием метода перекрестной проверки (cross validation) на обучающей выборке. Тестовая выборка будет использована только для оценки качества результирующей модели. Если использовать всю обучающую выборку для выбора модели, то уходит очень много времени на рассчеты. Поэтому выбор модели будем делать на 20% от всех обучающих данных. Если при оценке какой-то модели окажется, что ее можно улучшить, увеличив размер обучающей выборки, то у нас будет такая возможность!
Размеры выборок:
обучающая: 11255 экземпляров.
проверочная: отсутствует, т.к. применяем кросс-валидацию.
тестовая: 3749 экземпляров.
Для обучения модели мы можем использовать не все доступные параметры, в частности мы исключаем низкоинформативные параметры.
Исключаем следующие параметры с низкой информативностью:
## freqRatio percentUnique zeroVar nzv
## x1 58.15054 0.10661928 FALSE TRUE
## x2 34.41270 0.02665482 FALSE TRUE
## x3 88.30400 0.02665482 FALSE TRUE
## x5 52.16908 0.06219458 FALSE TRUE
## x6 129.87209 0.01776988 FALSE TRUE
## x7 39.05338 0.01776988 FALSE TRUE
## x22 20.07170 0.07107952 FALSE TRUE
При построении модели каждая категориальная переменная разворачиваются в набор бинарных переменных (со занчениями 0 ли 1), число которых равно количеству категорий у категориальной переменной. Посмотрим на количество уникальных значений (категорий) для наших категориальных переменных:
## x0 x1 x2 x3 x4 x5 x9 x10 x11 x12 x14 x15 x16 x17 x18
## 85 12 3 3 6 7 8 1263 5 8 33 3 10 73 1890
## x19 x20 x21 x22
## 11 77 2471 8
Исключаем из рассмотрения следующие Категорийные параметры, у которых количество категорий >11: x0, x1, x10, x14, x17, x18, x20, x21.
Для первоначальной отладки будем использовать еще более сокращенный вариант, в котором отсечены параметры с числом категорий >3: **x0, x1, x4, x5, x9, x10, x11, x12, x14, x16, x17, x18, x19, x20, x21, x22
Это продвинутый (boosted) вариант логистической регресии, один из самых базовых методов классификации, поэтому начнем с него. Модель строим на основе всех параметров пользователя, поскольку это, во-первых, дает немного лучшие результаты, а во-вторых, что самое важное, позволит нам получить альтернативный набор наиболее значимых параметров пользователя для построения других моделей.
Несмотря на невысокую точность модели, проведем ее анализ с целью определить, какие параметры пользователя оказывали наибольшее влияние на результат.
Проведем анализ сдвига/разброса модели на основе Bossted GLM с параметрами:
Из графика видим, что модель не страдает от переобучения и показанная ею точность в районе 75-80% является ее “нормальной” точностью (сдвигом) для заданных условий. Уменьшить сдвиг этой модели можно за счет:
Хотя логистическая регрессия в сложных задачах может давать не самую высокую точность предсказания, она неплохо работает в нашем случае, а также она позволяет неплохо выбрать наиболее значимые параметры пользователя для задачи классификации ВИП/не-ВИП. При обучении других более сложных моделей помимо отобранных ранее с помощью генетического алгоритма набора параметров будем также пробовать альтернативый набор, состоящий из 30-ти параметров, которые оказались наиболее информативными при построении логистической регрессии.
Нам не удалось выявить наиболее важные параметры путем применения glmboost, попробуем сделать это методом plr, который также является разновиностью логистической регрессии.
Ничего путного этот метод не дал.
Потерпели неудачу с Boosted GLM. попробуем построить простую модель - дерево решений.
Применяем метод Cost-Sensitive Classification And Regression Tree (CART), чтобы иметь возможность противостоять потенциально высокому разбросу (переобучению) модели за счет параметра Cost.
## n= 11255
##
## node), split, n, loss, yval, (yprob)
## * denotes terminal node
##
## 1) root 11255 7705 2 (0.0073 0.039 0.32 0.29 0.2 0.11 0.036)
## 2) x8>=0.9670249 3181 623 2 (0.0047 0.054 0.8 0.047 0.047 0.034 0.0094)
## 4) x8>=0.9714216 183 69 1 (0 0.62 0.25 0.033 0.066 0.016 0.016) *
## 5) x8< 0.9714216 2998 485 2 (0.005 0.02 0.84 0.048 0.045 0.035 0.009) *
## 3) x8< 0.9670249 8074 4921 3 (0.0083 0.033 0.12 0.39 0.26 0.14 0.046)
## 6) x8>=0.9621397 3703 1009 3 (0.0086 0.018 0.13 0.73 0.057 0.039 0.02)
## 12) x8>=0.9665364 556 306 2 (0.0036 0.009 0.45 0.37 0.083 0.061 0.023)
## 24) x56>=0.5512769 139 42 2 (0 0 0.7 0.22 0.043 0.036 0) *
## 25) x56< 0.5512769 417 242 3 (0.0048 0.012 0.37 0.42 0.096 0.07 0.031) *
## 13) x8< 0.9665364 3147 659 3 (0.0095 0.019 0.073 0.79 0.052 0.035 0.02) *
## 7) x8< 0.9621397 4371 2477 4 (0.008 0.047 0.12 0.11 0.43 0.22 0.068)
## 14) x8>=0.956766 2427 745 4 (0.0087 0.059 0.091 0.084 0.69 0.05 0.014) *
## 15) x8< 0.956766 1944 1097 5 (0.0072 0.032 0.15 0.13 0.11 0.44 0.14)
## 30) x8< 0.9523693 914 688 6 (0.0055 0.043 0.19 0.21 0.18 0.12 0.25)
## 60) x8< 0.9428432 628 460 3 (0.008 0.048 0.24 0.27 0.23 0.16 0.048)
## 120) x30>=0.003132408 195 107 2 (0.0051 0.13 0.45 0.28 0.11 0.021 0) *
## 121) x30< 0.003132408 433 311 4 (0.0092 0.012 0.14 0.26 0.28 0.22 0.069)
## 242) x57>=0.3097179 136 71 3 (0.0074 0.0074 0.12 0.48 0.18 0.13 0.074) *
## 243) x57< 0.3097179 297 199 4 (0.01 0.013 0.15 0.16 0.33 0.27 0.067) *
## 61) x8>=0.9428432 286 90 6 (0 0.031 0.094 0.08 0.07 0.038 0.69) *
## 31) x8>=0.9523693 1030 295 5 (0.0087 0.022 0.11 0.062 0.047 0.71 0.037) *
## rpart variable importance
##
## only 20 most important variables shown (out of 89)
##
## Overall
## x8 100.0000
## x57 20.8050
## x58 17.6341
## x30 16.1235
## x56 11.6838
## x59 5.1713
## x29 3.3485
## x1191bb549494 3.3229
## x12e33c63cf35 2.9422
## x9f67f142e40 0.9576
## x48aa82606c6 0.4334
## x23 0.1781
## x35 0.1623
## x32 0.1589
## x11669ea3d319 0.1459
## x44 0.0000
## `x19Не определено` 0.0000
## x33 0.0000
## x19dd9c9e0da2 0.0000
## x40 0.0000
Получаем неплохую точность определения возрастной группы пользователей ~73%. Смущает факт. что в модели используется всего несколько переменных для определения возрастной группы. Возможно, это ее слабое место, ограничивающее максимальную достижимую точность.
Проведем анализ сдвига/разброса на основе Дерева решений c параметрами:
Этот график показывает низкий уровень разброса модели, поскольку графики сходятся. Графики еще не сошлись, что означает, что увеличение размера обучающей выборки может повысить точность модели. Предельной точностью данной модели будет ~74%, которую мы видим на графике для тестовой выборки при максимальных значениях её размера.
Дерево решений дало неплохой результат в качестве отправной точки. Попробуем усилить ее за счет применения модели Случайный лес.
## user system elapsed
## 56.033 0.203 624.776
## Random Forest
##
## 37502 samples
## 48 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 33749, 33752, 33752, 33750, 33753, 33753, ...
##
## Resampling results across tuning parameters:
##
## mtry Accuracy Kappa Accuracy SD Kappa SD
## 15 0.7370800 0.6464789 0.006564933 0.008721471
## 17 0.7386799 0.6490997 0.005196765 0.006958400
## 19 0.7411861 0.6527022 0.006523305 0.008784235
## 21 0.7442792 0.6571018 0.006835157 0.009260575
## 23 0.7443863 0.6575150 0.004790130 0.006473357
## 39 0.7463856 0.6608335 0.006609824 0.009005138
## 41 0.7488391 0.6641071 0.006393101 0.008679348
## 43 0.7476654 0.6625545 0.006364548 0.008693347
## 81 0.7464123 0.6610381 0.006854986 0.009387988
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was mtry = 41.
Случайный лес показывает несколько меньшую точность по сравнению с деревом решений, поскольку он содержит усредненную оценку от 100 деревьев. Зато менее вероятно, что эта модель переообучена, т.е. мы ожидаем, что она с большей вероятностью будет показывать такую же точность на новых данных по сравнению с деревом решений.
Проведем анализ сдвига/разброса на основе Случайного леса c параметром mtry =41.
При nTree=50 график показывает, что обучающая ошибка постоянно равна 0, а тестовая ~ 25%. Это означает, что модель переобучена (имеет высокий разброс) и сдвинута (имеет высокий сдвиг). При nTree = 100 график показывает то же самое.
Чтобы побороть проблему переобучения, можно применть следующее:
Поскольку данная модель показывает адекватные результаты, выделим параметры абонента, которые для нее оказались важными. Будем использовать этот набор параметров в случаях, когда другие модели будут показывать высокий разброс.
## variable Overall class
## 1 x8 100.000000 numeric
## 2 x56 9.072750 numeric
## 3 x57 8.900316 numeric
## 4 x30 7.747950 numeric
## 5 x58 6.891428 numeric
## 6 x23 5.800578 numeric
## 7 x29 5.242962 numeric
## 8 x59 4.286280 numeric
## 9 x37 3.929135 numeric
## 10 x54 3.634879 numeric
## 11 x61 3.578602 numeric
## 12 x24 3.533837 numeric
## 13 x27 3.469796 numeric
## 14 x53 3.352441 numeric
## 15 x41 3.331346 numeric
## 16 x13 3.309874 numeric
## 17 x40 3.286897 numeric
## 18 x43 3.150159 numeric
## 19 x55 3.104698 numeric
## 20 x26 2.958803 numeric
## 21 x28 2.922464 numeric
## 22 x25 2.874142 numeric
## 23 x60 2.752286 numeric
## 24 x32 2.729853 numeric
## 25 x42 2.722994 numeric
## 26 x33 2.661877 numeric
## 27 x36 2.412021 numeric
## 28 x44 2.251774 numeric
## 29 x45 2.134243 numeric
## 30 x31 2.133036 numeric
## 31 x48 2.005282 numeric
## 32 x50 1.961128 numeric
## 33 x49 1.961083 numeric
## 34 x46 1.956050 numeric
## 35 x52 1.876651 numeric
## 36 x47 1.847592 numeric
## 37 x39 1.847104 numeric
## 38 x51 1.844711 numeric
## 39 x38 1.612083 numeric
## 40 x35 1.429566 numeric
Видим, что самыми значимыми (значимость >1%) оказались только числовые параметры. Посмотрим на их значения.
## x8 x56 x57 x30
## Min. :0.0000 Min. :0.00000 Min. :0.00000 Min. :0.0000000
## 1st Qu.:0.9590 1st Qu.:0.04545 1st Qu.:0.04348 1st Qu.:0.0000000
## Median :0.9638 Median :0.19318 Median :0.18182 Median :0.0000155
## Mean :0.9614 Mean :0.29062 Mean :0.27667 Mean :0.0086774
## 3rd Qu.:0.9673 3rd Qu.:0.47426 3rd Qu.:0.44444 3rd Qu.:0.0060793
## Max. :1.0000 Max. :1.00000 Max. :1.00000 Max. :1.0000000
##
## x58 x23 x29
## Min. :0.00000 Min. :0.007289 Min. :0.0000000
## 1st Qu.:0.01220 1st Qu.:0.132236 1st Qu.:0.0002009
## Median :0.08621 Median :0.178339 Median :0.0011873
## Mean :0.19270 Mean :0.173109 Mean :0.0045174
## 3rd Qu.:0.27586 3rd Qu.:0.214542 3rd Qu.:0.0041283
## Max. :1.00000 Max. :1.000000 Max. :1.0000000
##
## x59 x37 x54 x61
## Min. :0.00000 Min. :0.00000 Min. :0.0000 Min. :0.000000
## 1st Qu.:0.00000 1st Qu.:0.01044 1st Qu.:0.2813 1st Qu.:0.007325
## Median :0.02273 Median :0.01914 Median :0.4476 Median :0.019044
## Mean :0.10867 Mean :0.02835 Mean :0.4495 Mean :0.028466
## 3rd Qu.:0.11184 3rd Qu.:0.03422 3rd Qu.:0.6427 3rd Qu.:0.037539
## Max. :1.00000 Max. :0.80452 Max. :1.0000 Max. :1.000000
##
## x24 x27 x53 x41
## Min. :0.00000 Min. :0.00000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.01992 1st Qu.:0.01030 1st Qu.:0.1838 1st Qu.:0.2001
## Median :0.02958 Median :0.01661 Median :0.2995 Median :0.3236
## Mean :0.03578 Mean :0.02654 Mean :0.3142 Mean :0.3317
## 3rd Qu.:0.04311 3rd Qu.:0.03055 3rd Qu.:0.4342 3rd Qu.:0.4467
## Max. :1.00000 Max. :1.00000 Max. :1.0000 Max. :1.0000
##
## x13 x40 x43 x55
## Min. :0.0000000 Min. :0.00000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.0004711 1st Qu.:0.01802 1st Qu.:0.01407 1st Qu.:0.00000
## Median :0.0024663 Median :0.02613 Median :0.03140 Median :0.00000
## Mean :0.0054629 Mean :0.03029 Mean :0.04053 Mean :0.04312
## 3rd Qu.:0.0064697 3rd Qu.:0.03694 3rd Qu.:0.05525 3rd Qu.:0.01382
## Max. :1.0000000 Max. :1.00000 Max. :1.00000 Max. :1.00000
##
## x26 x28 x25 x60
## Min. :0.00000 Min. :0.00000 Min. :0.000000 Min. :0.00000
## 1st Qu.:0.02507 1st Qu.:0.01069 1st Qu.:0.007458 1st Qu.:0.00000
## Median :0.04735 Median :0.01908 Median :0.015225 Median :0.00000
## Mean :0.06059 Mean :0.02677 Mean :0.020619 Mean :0.04771
## 3rd Qu.:0.08078 3rd Qu.:0.03359 3rd Qu.:0.026478 3rd Qu.:0.02006
## Max. :0.88858 Max. :1.00000 Max. :1.000000 Max. :1.00000
##
## x32 x42 x33 x36
## Min. :0.00000 Min. :0.0000 Min. :0.00000 Min. :0.00000
## 1st Qu.:0.00000 1st Qu.:0.2000 1st Qu.:0.07895 1st Qu.:0.02667
## Median :0.00000 Median :0.3231 Median :0.15789 Median :0.04000
## Mean :0.06257 Mean :0.3324 Mean :0.16753 Mean :0.04719
## 3rd Qu.:0.08333 3rd Qu.:0.4462 3rd Qu.:0.23684 3rd Qu.:0.06667
## Max. :1.00000 Max. :1.0000 Max. :1.00000 Max. :1.00000
##
## x44 x45 x31 x48
## Min. :0.00000 Min. :0.000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.01099 1st Qu.:0.308 1st Qu.:0.1013 1st Qu.:0.0040
## Median :0.02747 Median :0.538 Median :0.1179 Median :0.4680
## Mean :0.03579 Mean :0.540 Mean :0.1266 Mean :0.4696
## 3rd Qu.:0.04945 3rd Qu.:0.810 3rd Qu.:0.1376 3rd Qu.:0.8100
## Max. :1.00000 Max. :1.000 Max. :1.0000 Max. :1.0000
##
## x50 x49 x46 x52
## Min. :0.000 Min. :0.0000 Min. :0.0000 Min. :0.0000
## 1st Qu.:0.000 1st Qu.:0.0000 1st Qu.:0.2500 1st Qu.:0.0000
## Median :0.461 Median :0.4540 Median :0.5000 Median :0.4570
## Mean :0.462 Mean :0.4617 Mean :0.5216 Mean :0.4642
## 3rd Qu.:0.809 3rd Qu.:0.7950 3rd Qu.:0.8000 3rd Qu.:0.8420
## Max. :1.000 Max. :1.0000 Max. :1.0000 Max. :1.0000
##
## x47 x39 x51 x38
## Min. :0.0000 Min. :0.00000 Min. :0.0000 Min. :0.000000
## 1st Qu.:0.2000 1st Qu.:0.02000 1st Qu.:0.0000 1st Qu.:0.000000
## Median :0.5000 Median :0.04000 Median :0.4570 Median :0.000000
## Mean :0.5058 Mean :0.04912 Mean :0.4605 Mean :0.002060
## 3rd Qu.:0.8000 3rd Qu.:0.06000 3rd Qu.:0.8090 3rd Qu.:0.002747
## Max. :1.0000 Max. :1.00000 Max. :1.0000 Max. :1.000000
##
## x35 y
## Min. :0.000 0: 271
## 1st Qu.:0.000 1: 1473
## Median :0.000 2:11831
## Mean :0.268 3:11008
## 3rd Qu.:0.500 4: 7509
## Max. :1.000 5: 4065
## 6: 1345
Обычный случайный лес показал высокий разброс при хорошей точности тренировочной модели, т.е. переобученность. Попробуем побороться с ней за счет регуляризации.
## user system elapsed
## 88.382 0.264 990.099
## Regularized Random Forest
##
## 37502 samples
## 40 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 33749, 33752, 33752, 33750, 33753, 33753, ...
##
## Resampling results across tuning parameters:
##
## mtry Accuracy Kappa Accuracy SD Kappa SD
## 9 0.7452123 0.6593875 0.007625858 0.010298406
## 11 0.7457991 0.6601944 0.006770020 0.009181461
## 13 0.7452123 0.6594049 0.007387136 0.009899708
## 15 0.7449456 0.6591739 0.007391066 0.010117734
## 17 0.7443589 0.6583502 0.007968812 0.010843139
## 19 0.7448659 0.6589936 0.005978534 0.008133256
## 21 0.7443058 0.6581560 0.007453304 0.010124576
## 41 0.7441189 0.6580159 0.008036985 0.010951162
##
## Tuning parameter 'coefReg' was held constant at a value of 0.8
##
## Tuning parameter 'coefImp' was held constant at a value of 0
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were mtry = 11, coefReg = 0.8
## and coefImp = 0.
## [1] 0.7457991
Проведем анализ сдвига/разброса на основе Случайного леса c параметром mtry =41.
Эффекта никакого нет по сравнению с обычным случайным лесом.
Попробуем еще один вариант логистической регрессии. А логистическая ли это регрессия?
Logitboost algorithm relies on a voting scheme to make classifications. Many (nIter of them) week classifiers are applied to each sample and their findings are used as votes to make the final classification. The class with the most votes “wins”. However, with this scheme it is common for two cases have a tie (the same number of votes), especially if number of iterations is even. In that case NA is returned, instead of a label. Train logitboost classification algorithm using decision stumps (one node decision trees) as weak learners.
## user system elapsed
## 31.259 0.288 212.283
## Boosted Logistic Regression
##
## 37502 samples
## 48 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 33752, 33752, 33753, 33751, 33751, 33752, ...
##
## Resampling results across tuning parameters:
##
## nIter Accuracy Kappa Accuracy SD Kappa SD
## 20 0.7709157 0.6897355 0.007476782 0.010106714
## 21 0.7782718 0.6999806 0.006615587 0.008962107
## 22 0.7682521 0.6855023 0.006787088 0.009004894
## 30 0.7707532 0.6894436 0.006447203 0.008552164
## 59 0.7739537 0.6930150 0.005857256 0.008677606
## 60 0.7710666 0.6898467 0.005562986 0.007715670
## 61 0.7748095 0.6949653 0.005636459 0.007852379
## 80 0.7713553 0.6907467 0.003564486 0.005188747
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was nIter = 21.
## ROC curve variable importance
##
## variables are sorted by maximum importance across the classes
## only 20 most important variables shown (out of 48)
##
## X0 X1 X2 X3 X4 X5 X6
## x8 75.13 75.81 100.00 83.89 91.51 97.16 100.00
## x30 74.30 94.06 80.87 61.21 75.03 87.37 94.06
## x29 61.90 85.33 80.71 69.55 50.85 68.83 85.33
## x56 75.47 58.02 75.47 62.45 63.22 59.28 73.42
## x59 60.00 69.87 54.17 52.94 48.33 69.87 40.20
## x11 64.88 69.24 61.52 50.55 34.26 60.59 69.24
## x55 57.85 67.04 55.03 57.70 56.77 65.98 67.04
## x31 44.33 66.10 58.72 47.48 36.10 51.75 66.10
## x57 48.18 63.05 64.96 64.96 57.34 58.76 51.19
## x58 45.10 39.47 63.75 61.03 63.75 49.75 53.32
## x23 44.29 62.39 35.96 56.28 62.39 60.48 55.71
## x35 30.07 59.73 54.31 26.16 37.97 48.67 59.73
## x43 32.32 58.97 56.98 49.41 39.05 41.10 58.97
## x12 58.24 58.83 52.92 45.94 34.71 45.59 58.83
## x34 27.18 57.09 52.50 22.14 33.15 44.75 57.09
## x40 35.75 51.81 56.29 50.27 42.95 32.88 56.29
## x44 28.21 54.90 53.10 44.81 35.45 38.12 54.90
## x60 46.17 52.61 54.35 41.56 39.49 33.46 54.35
## x32 44.51 51.48 39.95 24.85 35.00 44.60 51.48
## x26 37.48 49.61 46.88 38.71 37.55 29.96 49.61
Проведем анализ сдвига/разброса на основе LogitBoost c параметром nIter =21.
Модель показывает низкий уровень разброса и является хорошим кандидатом для финальной модели.
Результаты кажутся очень впечатляющими, однако, следует принять во внимание слудующую особенность модели LogitBoost. При одинаковом количестве голосов за два класса, модель в качестве прогноза выдает NA, которые не учитыватся при рассчете точности. Получается, что наиболее точная модель - та, которая выдает наибольшее количество NA. Попробуем другую модель с голосами, котолрая свободна от таких проблем.
Предыдущий метод использовал набор одноуровневых деревьев для коллективного голосования, сейчас мы будем использовать сборку из многоуровневых деревьев.
## user system elapsed
## 240.376 0.040 530.703
##
## Call:
## C5.0.default(x = structure(c(0.96238397655105,
## 0.239203061410435, 0.209803802466136,
## 0.107999757030918, 0.103565571281055, 0.200813946425317, 0.164064872744
##
## Rule-Based Model
## Number of samples: 11255
## Number of predictors: 40
##
## Number of boosting iterations: 100
## Average number of rules: 294.5
##
## Non-standard options: attempt to group attributes
## [1] 0.7417155
Проведем анализ сдвига/разброса для Продвинутого дерева решений (C5.0):
Модель переобучена.
Поскольку Случайный лес переобучен, применим к нему технику bagging. Модель treebag не имеет параметров настройки.
## user system elapsed
## 112.247 0.325 255.335
## Bagged CART
##
## 37502 samples
## 40 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 33753, 33753, 33753, 33751, 33753, 33751, ...
##
## Resampling results
##
## Accuracy Kappa Accuracy SD Kappa SD
## 0.7409199 0.6539494 0.007203271 0.009536604
##
##
## [1] 0.7409199
Попробуем еще один вариант баггинга.
Не получилось запуцстить эту модели из-за ошибки.
An implementation of extensions to Freund and Schapire’s AdaBoost algorithm and Friedman’s gradient boosting machine. Includes regression methods for least squares, absolute loss, t-distribution loss, quantile regression, logistic, multinomial logistic, Poisson, Cox proportional hazards partial likelihood, AdaBoost exponential loss, Huberized hinge loss, and Learning to Rank measures (LambdaMart). http://en.wikipedia.org/wiki/Gradient_boosting
Параметры модели:
Ничего интересного в результатах. Далее не рассматриваем. ?Проведем анализ сдвига/разброса на основе Stochastic Gradient Boosting c параметрами: - n.trees = r modGBM\(bestTune\)n.trees, - interaction.depth = r modGBM\(bestTune\)interaction.depth, - shrinkage = r modGBM\(bestTune\)shrinkage.
Известно, что для задач классификации лучше подходит ядро на снове радиальной базисной функции или полиномиальное ядро, нежели чем линейное ядро. Тесты показывют, что лучще всего работает полиномиальное ядро, затем идут RBF и линейное ядра. Используем полиномиальное ядро. Эксперименты показали, что SVM Надо обучать сразу на большом объеме данных (или близком к нему). Это требует слишком много ресурсов. Отказываемся от SVM.
Значимыми являеются не все параметры, некоторые из них категорийные.
Проведем анализ сдвига/разброса модели SVM для полной обучающей выборки cо следующими параметрами:
?Из графика видим низкий уровень разброса модели, что хорошо, однако, уровень сдвига модели довольно высок и нестабилен, что плохо.
## user system elapsed
## 68.810 0.403 299.863
## Multi-Layer Perceptron
##
## 11255 samples
## 40 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 10130, 10130, 10131, 10129, 10130, 10129, ...
##
## Resampling results across tuning parameters:
##
## size Accuracy Kappa Accuracy SD Kappa SD
## 6 0.5520248 0.3967383 0.01003302 0.01561428
## 7 0.5509509 0.3937554 0.01707918 0.02143890
## 8 0.5518429 0.3955980 0.01174586 0.01888790
##
## Accuracy was used to select the optimal model using the largest value.
## The final value used for the model was size = 6.
## ROC curve variable importance
##
## variables are sorted by maximum importance across the classes
## only 20 most important variables shown (out of 40)
##
## X0 X1 X2 X3 X4 X5 X6
## x8 76.62 75.87 100.00 85.12 93.04 99.59 100.00
## x30 75.44 96.30 81.65 61.19 75.58 87.68 96.30
## x29 71.09 84.33 81.42 70.77 53.05 68.32 84.33
## x56 73.42 55.27 76.01 61.21 60.99 58.05 76.01
## x31 44.50 71.42 61.37 50.81 39.41 55.61 71.42
## x57 52.50 70.16 65.88 70.16 62.06 61.05 54.93
## x59 57.83 67.71 53.65 52.41 48.06 67.71 37.45
## x58 55.52 38.34 66.60 64.23 66.60 50.50 54.33
## x23 48.35 63.34 34.70 56.78 61.66 63.34 56.45
## x55 55.52 62.96 49.45 53.80 52.49 60.88 62.96
## x43 40.35 57.79 54.16 47.51 36.17 44.40 57.79
## x37 57.74 38.52 51.70 57.74 56.16 44.38 45.06
## x35 27.44 54.71 51.11 24.57 35.64 47.21 54.71
## x44 35.81 53.95 51.10 43.20 33.64 42.20 53.95
## x13 36.94 53.24 38.60 35.12 34.50 45.09 53.24
## x32 15.09 52.95 38.51 29.68 37.59 50.02 52.95
## x60 46.28 50.06 52.93 39.96 38.90 31.70 52.93
## x40 46.27 46.13 51.83 46.78 40.10 32.39 51.83
## x24 47.39 43.19 47.39 45.93 40.08 33.73 34.82
## x26 37.98 46.27 45.65 39.48 36.16 29.45 46.27
Последний график, показывает, что при увеличении количества итераций ошибка стремится к 0, т.е. модель склонна к переобучению. Ограничим число итераций по правилю “клюшки” 200 итерациями.
Проведем анализ полноты обучения для полученной нейросети RSNNS с параметрами:
Модель показывает неплохую точность на тестовой выборке, однако разброс довольно велик.
Можно применить нейросеть с предварительным отбором параметров на основе метода главных компонент (pcaNNet), но мы уже отобрали наиборлее информативные параметры, поэтому используем обычную одноуровневую нейросеть (nnet).
## user system elapsed
## 85.395 0.040 916.115
## Neural Network
##
## 37502 samples
## 10 predictors
## 7 classes: '0', '1', '2', '3', '4', '5', '6'
##
## No pre-processing
## Resampling: Cross-Validated (10 fold)
##
## Summary of sample sizes: 33752, 33753, 33751, 33752, 33752, 33752, ...
##
## Resampling results across tuning parameters:
##
## decay size Accuracy Kappa Accuracy SD Kappa SD
## 1e-04 6 0.7217221 0.6261146 0.007000452 0.009617237
## 1e-04 7 0.7250556 0.6308351 0.007037469 0.009609384
## 1e-04 8 0.7282282 0.6350868 0.008186332 0.011656754
## 1e-04 9 0.7310284 0.6392214 0.007303883 0.010210809
## 1e-03 6 0.7188964 0.6219045 0.008193404 0.011540038
## 1e-03 7 0.7215629 0.6256663 0.008155400 0.011520817
## 1e-03 8 0.7236958 0.6287350 0.008622964 0.012190729
## 1e-03 9 0.7281220 0.6349949 0.008361018 0.011643083
## 1e-02 6 0.6538302 0.5322199 0.032058260 0.043519035
## 1e-02 7 0.6481838 0.5248769 0.033044045 0.044424409
## 1e-02 8 0.6626571 0.5446229 0.030256546 0.041159015
## 1e-02 9 0.6782343 0.5662829 0.031774999 0.043772010
##
## Accuracy was used to select the optimal model using the largest value.
## The final values used for the model were size = 9 and decay = 1e-04.
Проведем анализ полноты обучения для полученной нейросети nnet с параметрами:
## model accuracy variance
## 1 Decision Tree (rpart) 0.7362549 ?Низкий
## 2 Random Forest 0.7419797 ?Очень высокий
## 3 LogitBoost Classification Algorithm 0.7782718 Низкий
## 4 Продвинутое дерево решений (C5.0) 0.7367379 Высокий
## 5 Neural network (nnet) 0.6825774 Низкий
В качестве победившей по качеству предсказания на обучающих данных выбираем модель " (RSNNS)“. Оценим качество ее предсказания на тестовой выборке, которую модель не”видела" при обучении.
## Confusion Matrix and Statistics
##
## Reference
## Prediction 0 1 2 3 4 5 6
## 0 0 0 0 0 0 0 0
## 1 1 132 48 9 12 2 0
## 2 15 118 3178 305 206 150 46
## 3 41 113 369 3065 248 151 81
## 4 21 102 229 195 1888 104 45
## 5 11 19 103 76 130 920 46
## 6 1 7 16 19 19 27 230
##
## Overall Statistics
##
## Accuracy : 0.7532
## 95% CI : (0.7455, 0.7607)
## No Information Rate : 0.3155
## P-Value [Acc > NIR] : < 2.2e-16
##
## Kappa : 0.6703
## Mcnemar's Test P-Value : < 2.2e-16
##
## Statistics by Class:
##
## Class: 0 Class: 1 Class: 2 Class: 3 Class: 4 Class: 5
## Sensitivity 0.000000 0.26884 0.8060 0.8354 0.7543 0.67947
## Specificity 1.000000 0.99400 0.9018 0.8864 0.9304 0.96545
## Pos Pred Value NaN 0.64706 0.7909 0.7534 0.7307 0.70498
## Neg Pred Value 0.992799 0.97080 0.9098 0.9284 0.9380 0.96123
## Prevalence 0.007201 0.03929 0.3155 0.2936 0.2003 0.10834
## Detection Rate 0.000000 0.01056 0.2543 0.2452 0.1511 0.07361
## Detection Prevalence 0.000000 0.01632 0.3215 0.3255 0.2068 0.10442
## Balanced Accuracy 0.500000 0.63142 0.8539 0.8609 0.8423 0.82246
## Class: 6
## Sensitivity 0.51339
## Specificity 0.99261
## Pos Pred Value 0.72100
## Neg Pred Value 0.98210
## Prevalence 0.03585
## Detection Rate 0.01840
## Detection Prevalence 0.02552
## Balanced Accuracy 0.75300
После публикации этих данных точность оказалась 74.91%. Показатель невысокий, однако это первая публикация и она показала, что применяемый для выбора модели подход для оценки точности предстказания работает хорошо - в реальности точность оказалась даже чуть лучше, чем ожидалось.